package src.edu.uniquindio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import src.edu.uniquindio.mundo.Estudiante;

public class DaoEstudiante {

	private Connection conexion;

	public DaoEstudiante(Connection conexion) {
		super();
		this.conexion = conexion;
	}

	public void crearEstudiante(String codigo, int edad, String nombre,
			String direccion, String docente, String apellido1, String apellido2) {

		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("insert into Estudiante (codigo,edad,nombre,direccion,docente_Codigo,apellido1,apellido2) "
							+ "values(?,?,?,?,?,?,?)");

			pstmt.setString(1, codigo);
			pstmt.setInt(2, edad);
			pstmt.setString(3, nombre);
			pstmt.setString(4, direccion);
			pstmt.setString(5, docente);
			pstmt.setString(6, apellido1);
			pstmt.setString(7, apellido2);
			pstmt.executeUpdate();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * metodo para crear un Estudiante.
	 * 
	 * @param cliente
	 * @throws SQLException
	 */
	public boolean crear(Estudiante estudiante) throws SQLException {
		PreparedStatement pstmt = conexion
				.prepareStatement("insert into Estudiante (codigo,edad,nombre,direccion,docente_Cedula,apellido1,apellido2,foto) "
						+ "values(?,?,?,?,?,?,?,?)");

		pstmt.setString(1, estudiante.getCodigo());
		pstmt.setInt(2, estudiante.getEdad());
		pstmt.setString(3, estudiante.getNombre());
		pstmt.setString(4, estudiante.getDireccion());
		pstmt.setString(5, estudiante.getDocente().getCedula());
		pstmt.setString(6, estudiante.getApellido1());
		pstmt.setString(7, estudiante.getApellido2());
		pstmt.setString(8, estudiante.getFoto());
		int resul = pstmt.executeUpdate();
		if (resul > 0) {
			JOptionPane.showMessageDialog(null, "agregado exitosamente");
			return true;
		}
		return false;
	}

	/**
	 * metodo para buscar un Estudiante.
	 * 
	 * @param cedula
	 * @return
	 * @throws SQLException
	 */
	public Estudiante buscar(String docente, String codigo) throws SQLException {
		PreparedStatement pstmt = conexion
				.prepareStatement("select * from Estudiante where Codigo=? AND docente_Cedula=? ");
		pstmt.setString(1, codigo);
		pstmt.setString(2, docente);
		ResultSet tabla = pstmt.executeQuery();
		if (tabla.next()) {
			Estudiante encontrado = new Estudiante(tabla.getString(1),
					tabla.getInt(2), tabla.getString(3), tabla.getString(5),
					null, tabla.getString(4), tabla.getString(7),tabla.getString(8));
			return encontrado;
		}
		return null;
	}
	
	public Estudiante buscar( String codigo) throws SQLException {
		PreparedStatement pstmt = conexion
				.prepareStatement("select * from Estudiante where Codigo=? ");
		pstmt.setString(1, codigo);
		ResultSet tabla = pstmt.executeQuery();
		if (tabla.next()) {
			Estudiante encontrado = new Estudiante(tabla.getString(1),
					tabla.getInt(2), tabla.getString(3), tabla.getString(5),
					null, tabla.getString(4), tabla.getString(7),tabla.getString(8));
			return encontrado;
		}
		return null;
	}

	/**
	 * metodo para editar un Estudiante.
	 * 
	 * @param cliente
	 * @throws SQLException
	 */
	public boolean editar(Estudiante estudiante) throws SQLException {
		PreparedStatement pstmt = conexion
				.prepareStatement("update Estudiante set"
						+ " nombre=?,direccion=?,edad=?,apellido1=?,apellido2=? where codigo=?");
		pstmt.setInt(3, estudiante.getEdad());
		pstmt.setString(1, estudiante.getNombre());
		pstmt.setString(2, estudiante.getDireccion());
		pstmt.setString(4, estudiante.getApellido1());
		pstmt.setString(5, estudiante.getApellido2());
		pstmt.setString(6, estudiante.getCodigo());
		pstmt.executeUpdate();
		return true;
	}
	public void editarFotoEstudiante(String foto,String codigo) throws SQLException {
		PreparedStatement pstmt = conexion.prepareStatement("update Estudiante set  foto=?" +
				" where codigo=?");
		pstmt.setString(1, foto);
		pstmt.setString(2,codigo);
		pstmt.executeUpdate();
	}

	public List<Estudiante> listarEstudiantes(String cedulaDocente) {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("select codigo,edad,nombre,direccion,apellido1,apellido2,foto from Estudiante where docente_Cedula=?");
			pstmt.setString(1, cedulaDocente);
			ResultSet res = pstmt.executeQuery();
			while (res.next()) {
				String codigo = res.getString(1);
				int edad = res.getInt(2);
				String nombre = res.getString(3);
				String direccion = res.getString(4);
				String apellido1 = res.getString(5);
				String apellido2 = res.getString(6);
				String foto= res.getString(7);
				Estudiante estudiante = new Estudiante(codigo, edad, nombre,
						direccion, null, apellido1, apellido2,foto);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}
	public List<Estudiante> listarEstudiantesCodigo(String cedulaDocente,String codigo,int edad) {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("select edad,nombre,direccion,apellido1,apellido2,foto from Estudiante where docente_Cedula=? and codigo=? and edad=?");
			pstmt.setString(1, cedulaDocente);
			pstmt.setString(2,codigo);
			pstmt.setInt(3, edad);
			ResultSet res = pstmt.executeQuery();
			while (res.next()) {
				edad = res.getInt(1);
				String nombre = res.getString(2);
				String direccion = res.getString(3);
				String apellido1 = res.getString(4);
				String apellido2 = res.getString(5);
				String foto=res.getString(6);
				Estudiante estudiante = new Estudiante(codigo, edad, nombre,
						direccion, null, apellido1, apellido2,foto);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}

	public List<Estudiante> listarEstudiantes(String cedulaDocente, int edad) {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("select codigo,nombre,direccion,apellido1,apellido2,foto from Estudiante where docente_Cedula=? and edad=?");
			pstmt.setString(1, cedulaDocente);
			pstmt.setInt(2, edad);
			ResultSet res = pstmt.executeQuery();
			while (res.next()) {
				String codigo = res.getString(1);
				String nombre = res.getString(2);
				String direccion = res.getString(3);
				String apellido1 = res.getString(4);
				String apellido2 = res.getString(5);
				String foto=res.getString(6);
				Estudiante estudiante = new Estudiante(codigo, edad, nombre,
						direccion, null, apellido1, apellido2,foto);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}
	public List<Estudiante> listarEstudiantesNombreApell(String cedulaDocente,String nombre,String apellido,int edad) {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("select codigo,edad,direccion,apellido2,foto from Estudiante " +
							"where docente_Cedula=? and nombre=? and apellido1=? and edad=?");
			pstmt.setString(1, cedulaDocente);
			pstmt.setString(2, nombre);
			pstmt.setString(3, apellido);
			pstmt.setInt(4, edad);
			ResultSet res = pstmt.executeQuery();
			while (res.next()) {
				String codigo = res.getString(1);
				edad=res.getInt(2);
				String direccion = res.getString(3);
				String apellido2 = res.getString(4);
				String foto=res.getString(5);
				Estudiante estudiante = new Estudiante(codigo, edad, nombre,
						direccion, null, apellido, apellido2,foto);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}
	
	public List<Estudiante> listarEstudiantesNombre(String cedulaDocente,String nombre,int edad) {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("select codigo,edad,apellido1,direccion,apellido2,foto from Estudiante " +
							"where docente_Cedula=? and nombre=? and edad=? ");
			pstmt.setString(1, cedulaDocente);
			pstmt.setString(2, nombre);
			pstmt.setInt(3, edad);
			ResultSet res = pstmt.executeQuery();
			while (res.next()) {
				String codigo = res.getString(1);
				edad=res.getInt(2);
				String apellido=res.getString(3);
				String direccion = res.getString(4);
				String apellido2 = res.getString(5);
				String foto=res.getString(6);
				Estudiante estudiante = new Estudiante(codigo, edad, nombre,
						direccion, null, apellido, apellido2,foto);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}
	
	public List<Estudiante> listarEstudiantesPrimerApell(String cedulaDocente,String apellido,int edad) {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		try {
			PreparedStatement pstmt = conexion
					.prepareStatement("select codigo,edad,nombre,direccion,apellido2,foto from Estudiante " +
							"where docente_Cedula=? and apellido1=? and edad=? ");
			pstmt.setString(1, cedulaDocente);
			pstmt.setString(2,apellido);
			pstmt.setInt(3, edad);
			ResultSet res = pstmt.executeQuery();
			while (res.next()) {
				String codigo = res.getString(1);
				edad=res.getInt(2);
				String nombre=res.getString(3);
				String direccion = res.getString(4);
				String apellido2 = res.getString(5);
				String foto=res.getString(6);
				Estudiante estudiante = new Estudiante(codigo, edad, nombre,
						direccion, null, apellido, apellido2,foto);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}


}
